package co.com.sewebpoint.ws;

import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;

import org.springframework.beans.factory.annotation.Autowired;


import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import co.com.sewebpoint.dto.SolicitudWS;
import co.com.sewebpoint.exception.DaoExceptionSE;
import co.com.sewebpoint.exception.ServiceExceptionSE;
import co.com.sewebpoint.model.Solicitud;
import co.com.sewebpoint.service.SolicitudService;


/***
 * 
 * @author Esteban Hurtado y sara Tamayo
 * @version 1.0
 * 
 * Clase WebService Para Solicitud
 *
 */



@Path("Solicitud")
@Component

public class SolicitudWebService {
	
	@Autowired
	private SolicitudService solicitudService;
	
	/**
	 * Metodo que retorna la lista de solicitudes existente en l BD
	 * 
	 * 
	 * @return Lista de solicitudes existentes en la BD
	 * @throws RemoteException Ocurre algun error en la conexion a la base de datos
	 *
	 */
	
	
	@GET
	@Produces(MediaType.APPLICATION_JSON)
	
	public List<SolicitudWS> obtener() throws RemoteException{
		
		
		List<SolicitudWS> solicitudes = new ArrayList<SolicitudWS>();
		List<Solicitud> soliSpring = new ArrayList<Solicitud>();
		
	
		try {
			soliSpring = solicitudService.obtener();
			for (Solicitud s :soliSpring){
				
				SolicitudWS solicitudWS = new SolicitudWS();
				
				
				solicitudWS.setId(s.getId());
				solicitudWS.setNombre(s.getNombre());
				solicitudWS.setApellido(s.getApellido());
				solicitudWS.setEmail(s.getEmail());
				solicitudWS.setSucursal(s.getSucursal());
				solicitudWS.setProducto(s.getProducto());
				solicitudWS.setTipoSolicitud(s.getTipoSolicitud());
				solicitudWS.setDesSolicitud(s.getDesSolicitud());
				solicitudWS.setEstado(s.getEstado());
				
				
				
				
				solicitudes.add(solicitudWS);
				
			}
			
			
			
		} catch (DaoExceptionSE e) {
			throw new RemoteException(e.getMessage());
		}
		
		
		
		return solicitudes;
		
		
	}
	
	/**
	 * WebService que inserta un Solicitud en la base de datos 
	 * @param  String nombre, String apellido, String email,
	 *		String telefono, String celular, String sucursal, String producto,
	 *		String tipoSolicitud, String desSolicitud, boolean habilitado,
	 *		int estado
	 *@return devuelve un string con el error o vacio si inserto correctamente
	 * 

	 *
	 */
	
		
	@POST
	@Produces(MediaType.TEXT_PLAIN)
	public String guardar(
							@QueryParam("nombre") String nombre,
							@QueryParam("apellido") String apellido,
							@QueryParam("email") String email,
							@QueryParam("telefono") String telefono,
							@QueryParam("celular") String celular,
							@QueryParam("sucursal") String sucursal,
							@QueryParam("producto") String producto,
							@QueryParam("tipoSolicitud") String tipoSolicitud,
							@QueryParam("desSolicitud") String desSolicitud,
							@QueryParam("habilitado") boolean habilitado,
							@QueryParam("estado") int estado
							
			){
		
		
		
		try {
			solicitudService.guardar(nombre, apellido, email, telefono, celular, sucursal, producto, tipoSolicitud, desSolicitud, habilitado, estado);
		} catch (DaoExceptionSE e) {
			// TODO Auto-generated catch block
			e.printStackTrace() ;
			return  e.getMessage();
			
		} catch (ServiceExceptionSE e) {
			// TODO Auto-generated catch block
			e.printStackTrace() ;
			return  e.getMessage();
		}
		
		
		
		return "";
		
	}
	
	/**
	 * Retorna una unica Solicitud
	 * 
	 * 
	 * @return Retorna una sola solicitud
	 * @throws RemoteException Ocurre algun error en la conexion a la base de datos
	 *
	 */
	
	
	@GET
	@Produces(MediaType.APPLICATION_JSON)
	
	public SolicitudWS obtener(@QueryParam("id") int id) throws RemoteException{
			
			SolicitudWS solicitudWS = new SolicitudWS();
			Solicitud s;
		
			try {
				s = solicitudService.obtener(id);
					
				
				
				solicitudWS.setId(s.getId());
				solicitudWS.setNombre(s.getNombre());
				solicitudWS.setApellido(s.getApellido());
				solicitudWS.setEmail(s.getEmail());
				solicitudWS.setSucursal(s.getSucursal());
				solicitudWS.setProducto(s.getProducto());
				solicitudWS.setTipoSolicitud(s.getTipoSolicitud());
				solicitudWS.setDesSolicitud(s.getDesSolicitud());
				solicitudWS.setEstado(s.getEstado());
		
			} catch (DaoExceptionSE e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			
			
		
		
		
		
		return solicitudWS;
		
		
	}
	
	
	/**
	 * Metodo para enviar el email
	 * 
	 * 
	 * @return Retorna un string si fue enviado correctamente
	 * @throws RemoteException Ocurre algun error en la conexion a la base de datos
	 *
	 */
	
	
	@POST
	@Produces(MediaType.TEXT_PLAIN)
	public String enviarEmail(
							@QueryParam("id") int id,
							@QueryParam("respuesta") String respuesta
							
							
			){
		
		
		
		try {
			solicitudService.enviarEmail(id, respuesta);
		} catch (DaoExceptionSE e) {
			// TODO Auto-generated catch block
			e.printStackTrace() ;
			return  e.getMessage();
			
		} catch (ServiceExceptionSE e) {
			// TODO Auto-generated catch block
			e.printStackTrace() ;
			return  e.getMessage();
		}
		
		
		
		return "";
		
	}
	
	
	

}
